<?php

namespace Backend\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Form\Annotation\AnnotationBuilder;
use Zend\View\Model\JsonModel;
use Zend\Http\Header\Age;
use Application\Model\Utilisateur;
use Application\Model\UtilisateurTable;
use Application\Model\Role;
use Application\Model\RoleTable;

/**
 * UtilisateurController
 *
 * @author
 *
 * @version
 *
 */
class UtilisateurController extends AbstractActionController {
	protected $utilisateurTable;
	protected $roleTable;
	
	/**
	 * The default action - show the home page
	 */
	public function indexAction() {
		$this->layout()->setVariable("actionCustomVariable", "Annuaire des utilisateurs");
	}
	
	public function creationAction() {
		$this->layout()->setVariable("actionCustomVariable", "Ajouter un utilisateur");
	}
	
	public function editionAction() {
		$this->layout()->setVariable("actionCustomVariable", "Mettre &#224; jour les donn&#233;es utilisateur");
		
		$id = $this->params()->fromQuery('id');
	
		return new ViewModel (array('id' => $id));
	}
	
	/**
	 * RessourceAction pour le controller Agence
	 * 
	 */
	public function ressourceAction()
	{
		switch($_SERVER['REQUEST_METHOD']){
			case 'GET':
				$id = $this->params()->fromQuery('id');
				
				if( isset($id) && trim($id) != "" ){
					$Utilisateur = $this->getUtilisateurTable()->getUtilisateur($id);
						
					echo json_encode($Utilisateur);
				}else{
					$allUtilisateurs = $this->getUtilisateurTable()->fetchAllArray();
					
					return new JsonModel($allUtilisateurs);
				}
				
				break;
			case 'POST':
				
				// $form = $this->getForm();
				$request = $this->getRequest();
				
				$utilisateurInserted = null;
				 
				if ($request->isPost()) {
					$values = json_decode(file_get_contents('php://input'), true);
					
            		// $form->setData($values);
            		// if ( $form->isValid()) {

            			/* save datas in base */
            			$utilisateur = new Utilisateur();
            			$utilisateur->exchangeArray($values);
            			
            			if( $this->getUtilisateurTable()->verifierEmailUnique( $utilisateur ) ) {
            				$id = $this->getUtilisateurTable()->saveUtilisateur($utilisateur);

            				$utilisateurInserted = $this->getUtilisateurTable()->getUtilisateur($id);
            			} else {
            				$utilisateurInserted = array("message" => "L'email est déjà utilisé par un autre compte utilisateur. Veuillez en saisir un autre." );
            			}

            		// }else{
            			// $errors = $form->getMessages();
            			// print_r($errors);
            		// }
				}
				
				echo json_encode($utilisateurInserted);
				break;
			case 'PUT':
				$values = json_decode(file_get_contents('php://input'), true);
			
				if($values != null){
					$utilisateur = new Utilisateur();
					$utilisateur->exchangeArray($values);
			
					/* identifiant de l'agence */
					$this->getUtilisateurTable()->updateUtilisateur($utilisateur);
			
					$sejourInserted = $this->getUtilisateurTable()->getUtilisateur($utilisateur->id);
				}
			
				echo json_encode($sejourInserted);
			
				break;
			case 'DELETE':
				$id = $this->params()->fromQuery('id');
				
				if( isset($id) && trim($id) != "" ){
					$message = "";
					$this->getUtilisateurTable()->deleteUtilisateur($id);
					
					echo json_encode(array("message" => utf8_encode($message) ));
				}
				
				break;
		}
		
		return $this->response;
	}
	
	/**
	 * Retourne tous les roles en base
	 *
	 * @return \Zend\View\Model\JsonModel
	 */
	public function loadRolesAction()
	{
		$allRoles = $this->getRoleTable()->fetchAllArray();
			
		return new JsonModel($allRoles);
	}
	
	protected function getForm()
	{
		$builder    = new AnnotationBuilder();
		$entity     = new Utilisateur();
		$form       = $builder->createForm($entity);
		 
		return $form;
	}
	
	public function getUtilisateurTable()
	{
		if( !$this->utilisateurTable ){
			$sm = $this->getServiceLocator();
			$this->utilisateurTable = $sm->get("Application\Model\UtilisateurTable");
		}
		return $this->utilisateurTable;
	}

	public function getRoleTable()
	{
		if( !$this->roleTable ){
			$sm = $this->getServiceLocator();
			$this->roleTable = $sm->get("Application\Model\RoleTable");
		}
		return $this->roleTable;
	}
}
